/**
 * Copyright (c) 2009 blurredVision
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
 * associated documentation files (the "Software"), to deal in the Software without restriction, 
 * including without limitation the rights to use, copy, modify, merge, publish, distribute, 
 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all copies or 
 * substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT 
 * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT 
 * OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
#include "StdAfx.h"
#include "../guidefaults.h"
#include "../Canvas.h"


namespace gui {

Canvas::Canvas(void) 
 :	m_sTitle("")
{
}

Canvas::Canvas(const std::string &title)
 :	m_sTitle(title)
{
}

Canvas::~Canvas(void)
{
}

void Canvas::setTitle(const std::string &title)
{
	m_sTitle = title;
}

const std::string& Canvas::getTitle() const
{
	return m_sTitle;
}

void Canvas::resize()
{
	static comp_list::iterator it;
	int tempX = 99999, tempY = 99999;
	int tempW = 0, tempH = 0;

	for (it=components.begin(); it!=components.end(); ++it) {
		tempX = ((*it)->getX() < tempX) ? (*it)->getX() : tempX;
		tempY = ((*it)->getY() < tempY) ? (*it)->getY() : tempY;
		tempW = (((*it)->getX()+(*it)->getWidth()) > tempW) ? ((*it)->getX()+(*it)->getWidth()) : tempW;
		tempH = (((*it)->getY()+(*it)->getHeight()) > tempH) ? ((*it)->getY()+(*it)->getHeight()) : tempH;
	}

	vDim.x = tempX+tempW;
	vDim.y = tempY+tempH;
}

void Canvas::draw()
{
	if (bVisible) {
		vRealPos = getAbsolutePosition();
		if (!pTexture) {			
			pRenderer->drawFilledRect(vRealPos.x, vRealPos.y, vDim.x, vDim.y, vBackColor);
			pRenderer->drawRect(vRealPos.x, vRealPos.y, vDim.x, vDim.y, vBorderColor);
		} else {
			pTexture->display(vRealPos.x, vRealPos.y, 1, true);
		}
	}
	Component::drawElements();
}

} // namespace
